001 /** 002 * Created by IntelliJ IDEA. 003 * User: Wei Wang 004 * Date: Apr 24, 2003 005 * Time: 9:56:40 PM 006 */ 007 008 package EVolve.util.phasedetectors; 009 010 import EVolve.data.*; 011 import EVolve.Scene; 012 import EVolve.util.equators.UnorderedUnlimitedSet; 013 import EVolve.visualization.XYViz.ValRefViz.HotSpotViz.HotSpotVisualization; 014 import EVolve.visualization.ReferenceDimension; 015 import java.util.*; 016 017 public class PhaseEntityTrigger { 018 private UnorderedUnlimitedSet trigger; 019 private int state[]; 020 private final int triggerFound = 1; 021 022 public PhaseEntityTrigger() { 023 } 024 025 public ArrayList gatherTiggeredPhase(ArrayList data, int noiseTolerance) { 026 ArrayList phase = new ArrayList(); 027 Selection activeSelection = Scene.getFilter().getActiveSelection(); 028 029 if (activeSelection == null) { 030 Scene.showErrorMessage("No active selection."); 031 return phase; 032 } 033 034 state = new int[data.size()]; 035 for (int i=0; i<state.length; i++) { 036 state[i] = 0; 037 } 038 039 HotSpotVisualization visual = (HotSpotVisualization)Scene.getVisualizationManager().getActiveVisualization(); 040 HashMap entityName2Int = ((ReferenceDimension)visual.getDimension()[1]).getEntityName2IntMap(); 041 trigger = new UnorderedUnlimitedSet(); 042 043 Entity[] entities = activeSelection.getSelected(); 044 for (int i=0; i<entities.length; i++) { 045 int mappedId = ((Integer)entityName2Int.get(entities[i].getName())).intValue(); 046 trigger.addElement(mappedId); 047 } 048 049 050 for (int i=0; i<data.size(); i++) { 051 UnorderedUnlimitedSet current = (UnorderedUnlimitedSet)data.get(i); 052 053 if (current.intersection(trigger).size() == trigger.size() ) { 054 state[i] = triggerFound; 055 } 056 } 057 058 int noise = 0; 059 for (int i=0; i<state.length; i++) { 060 if (state[i] == triggerFound) { 061 noise ++; 062 if (noise > noiseTolerance) { 063 phase.add(new Integer(i-noise+1)); 064 noise = 0; 065 } 066 } else { 067 noise = 0; 068 } 069 } 070 071 return phase; 072 } 073 }